/**
 * 文件名：@AbstractFunctionSecurityProcessor.java <br/>
 * 包名：cn.efunbox.afw.web.security.processor <br/>
 * 项目名：afw-web <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.web.security.processor;

import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 类名：AbstractFunctionSecurityProcessor  <br />
 *
 * 功能：功能安全处理器
 *
 * @author xtwin <br />
 * 创建时间：2016年8月4日 上午11:27:14  <br />
 * @version 2016年8月4日
 */
public abstract class AbstractFunctionSecurityProcessor implements SecurityProcessor {

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2016年8月4日 上午11:27:43<br/>
	 * 
	 * @param request
	 * @param response
	 * @param handler
	 * @throws Exception <br/>
	 * @see cn.efunbox.afw.web.security.processor.SecurityProcessor#process(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object)
	 */
	@Override
	public void process(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		
		// 取得用户希望访问的资源
		Set<String> wishs = getWish(request, response, handler);
		
		if (null == wishs || wishs.isEmpty()) {
			// 用户无欲无望
			return ;
		}
		
		// 执行处理
		doProcess(wishs, request, response, handler);
	}
	
	/**
	 * 功能：针对用户希望的资源进行处理 <br/>
	 *
	 * @author xtwin <br/>
	 * @version 2016年8月4日 上午11:33:53 <br/>
	 */
	protected abstract void doProcess(Set<String> wishs, HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;

	/**
	 * 功能：取得当前希望访问的资源 <br/>
	 *
	 * @author xtwin <br/>
	 * @version 2016年8月4日 上午11:31:25 <br/>
	 */
	protected abstract Set<String> getWish(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
}